package RRHH_Modelo;

import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class RHH_TELEFONOS {

    private int ID;
    private int NUMERO_CORTO;
    private int ID_USUARIO;
    private String NUMERO;
    private int ESTADO;
    private int ID_COMPANIA_CELULAR;
    private Double MONTO_CREDITO;
    private Conexion con = null;

    public RHH_TELEFONOS(Conexion con) {
        this.con = con;
    }

    public RHH_TELEFONOS(int ID, int ID_USUARIO, String NUMERO, int ID_COMPANIA_CELULAR, Double MONTO_CREDITO) {
        this.ID = ID;
        this.ID_USUARIO = ID_USUARIO;
        this.NUMERO = NUMERO;
        this.ID_COMPANIA_CELULAR = ID_COMPANIA_CELULAR;
        this.MONTO_CREDITO = MONTO_CREDITO;
    }

    public int Insertar() throws SQLException {
        String idus="null";
        if(ID_USUARIO>0)
            idus=ID_USUARIO+"";
        
        String consulta = "insert into BROKER.RHH_TELEFONOS (ID, ID_USUARIO, NUMERO, ID_COMPANIA_CELULAR, MONTO_CREDITO,NUMERO_CORTO) VALUES (" + ID + "," + idus + ",'" + NUMERO + "'," + ID_COMPANIA_CELULAR + "," + MONTO_CREDITO + ", "+NUMERO_CORTO+")";
        con.EjecutarSentencia(consulta);
        consulta = "select BROKER.RHH_TELEFONOS_SEQ.currval as ID from dual";
        ResultSet rs = con.EjecutarConsulta(consulta);
        rs.next();
        return rs.getInt("ID");
    }
    public boolean modificar() throws SQLException {
        String consulta = "update BROKER.RHH_TELEFONOS set  MONTO_CREDITO ="+MONTO_CREDITO+", ID_USUARIO="+ID_USUARIO+" where ID="+ID;
        con.EjecutarSentencia(consulta);
        return true;
    }

    public boolean deshabilitar() throws SQLException {
        String consulta = "update BROKER.RHH_TELEFONOS set ESTADO = 1 where ID =" + getID();
        con.EjecutarSentencia(consulta);
        return true;
    }
    public boolean habilitar() throws SQLException {
        String consulta = "update BROKER.RHH_TELEFONOS set ESTADO = 0 where ID =" + getID();
        con.EjecutarSentencia(consulta);
        return true;
    }
    public boolean EliminarXidUsuario(int id) throws SQLException {
        String consulta = "update BROKER.RHH_TELEFONOS set ID_USUARIO='' where ID_USUARIO="+id;
        con.EjecutarSentencia(consulta);
        return true;
    }

    public List<RHH_TELEFONOS> Todos(String text) throws SQLException {
        String consulta = "SELECT RHH_TELEFONOS.*\n" +
                        " FROM BROKER.RHH_PERSONA, BROKER.RHH_TELEFONOS, BROKER.RHH_USUARIO\n" +
                        " WHERE (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID(+))\n" +
                        "       AND (RHH_TELEFONOS.ID_USUARIO = RHH_USUARIO.ID(+))\n" +
                        "       AND (RHH_TELEFONOS.ESTADO = 0)\n" +
                        "       AND (UPPER(RHH_PERSONA.PRIMER_NOMBRE||' '||RHH_PERSONA.SEGUNDO_NOMBRE||' '||RHH_PERSONA.PRIMER_APELLIDO||' '||RHH_PERSONA.SEGUNDO_APELLIDO) LIKE UPPER('%"+text+"%')\n" +
                        "       or (RHH_TELEFONOS.NUMERO like ('%"+text+"%'))\n" +
                        "       or (to_char(RHH_TELEFONOS.MONTO_CREDITO) like ('"+text+"%')))";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_TELEFONOS> lista = Cargar(rs);
        return lista;
    }
    public int cantidadMaxTelf() throws SQLException {
        String consulta =   "SELECT COUNT (RHH_TELEFONOS.NUMERO)as cantidad, RHH_TELEFONOS.ID_USUARIO\n" +
                            "    FROM BROKER.RHH_TELEFONOS\n" +
                            "GROUP BY RHH_TELEFONOS.ID_USUARIO";
        ResultSet rs = con.EjecutarConsulta(consulta);
        if(rs.next())
            return rs.getInt("cantidad");
        else
            return 0;
    }
    public List<RHH_TELEFONOS> TodosInactivos(String text) throws SQLException {
         String consulta = "SELECT RHH_TELEFONOS.*\n" +
                        " FROM BROKER.RHH_PERSONA, BROKER.RHH_TELEFONOS, BROKER.RHH_USUARIO\n" +
                        " WHERE (RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID(+))\n" +
                        "       AND (RHH_TELEFONOS.ID_USUARIO = RHH_USUARIO.ID(+))\n" +
                        "       AND (RHH_TELEFONOS.ESTADO = 1)\n" +
                        "       AND (UPPER(RHH_PERSONA.PRIMER_NOMBRE||' '||RHH_PERSONA.SEGUNDO_NOMBRE||' '||RHH_PERSONA.PRIMER_APELLIDO||' '||RHH_PERSONA.SEGUNDO_APELLIDO) LIKE UPPER('%"+text+"%')\n" +
                        "       or (RHH_TELEFONOS.NUMERO like ('%"+text+"%'))\n" +
                        "       or (to_char(RHH_TELEFONOS.MONTO_CREDITO) like ('"+text+"%')))";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_TELEFONOS> lista = Cargar(rs);
        return lista;
    }
    public List<RHH_TELEFONOS> TodosDisponibles() throws SQLException {
        String consulta = "select * from BROKER.RHH_TELEFONOS where ID_USUARIO is null and ESTADO=0";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_TELEFONOS> lista = Cargar(rs);
        return lista;
    }
    public RHH_TELEFONOS BuscarxId(int id) throws SQLException {
        String consulta = "select * from BROKER.RHH_TELEFONOS where ID = "+id;
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_TELEFONOS> lista = Cargar(rs);
        if(lista.size()>0)
            return lista.get(0);
        else
            return null;
    }
    public List<Integer> TodosNumeros() throws SQLException {
        String consulta = "select * from BROKER.RHH_TELEFONOS";
        ResultSet rs = con.EjecutarConsulta(consulta);
        
        List<Integer> lista = new ArrayList<>();
        while(rs.next())
        {
            lista.add(rs.getInt("NUMERO"));
        }
        return lista;
    }
    
    public List<RHH_TELEFONOS> buscarxUsuario(int id) throws SQLException {
        String consulta = "select * from BROKER.RHH_TELEFONOS where ID_USUARIO="+id;
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_TELEFONOS> lista = Cargar(rs);
        return lista;
    }
    public RHH_TELEFONOS buscarxNumero(String numero) throws SQLException {
        String consulta = "select * from BROKER.RHH_TELEFONOS where NUMERO='"+numero+"'";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_TELEFONOS> lista = Cargar(rs);
        if(lista.size()>0)
            return lista.get(0);
        else
            return null;
    }

    public List<RHH_TELEFONOS> Cargar(ResultSet rs) throws SQLException {
        List<RHH_TELEFONOS> lista = new ArrayList<RHH_TELEFONOS>();
        while (rs.next()) {
            RHH_TELEFONOS objeto = new RHH_TELEFONOS(con);
            objeto.setID(rs.getInt("ID"));
            objeto.setID_USUARIO(rs.getInt("ID_USUARIO"));
            objeto.setNUMERO(rs.getString("NUMERO"));
            objeto.setID_COMPANIA_CELULAR(rs.getInt("ID_COMPANIA_CELULAR"));
            objeto.setMONTO_CREDITO(rs.getDouble("MONTO_CREDITO"));
            objeto.setNUMERO_CORTO(rs.getInt("NUMERO_CORTO"));
            objeto.setESTADO(rs.getInt("ESTADO"));
            lista.add(objeto);
        }
        return lista;
    }

    public int getNUMERO_CORTO() {
        return NUMERO_CORTO;
    }

    public void setNUMERO_CORTO(int NUMERO_CORTO) {
        this.NUMERO_CORTO = NUMERO_CORTO;
    }   
    
    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public int getID_USUARIO() {
        return ID_USUARIO;
    }

    public void setID_USUARIO(int ID_USUARIO) {
        this.ID_USUARIO = ID_USUARIO;
    }

    public String getNUMERO() {
        return NUMERO;
    }

    public void setNUMERO(String NUMERO) {
        this.NUMERO = NUMERO;
    }

    public int getID_COMPANIA_CELULAR() {
        return ID_COMPANIA_CELULAR;
    }

    public void setID_COMPANIA_CELULAR(int ID_COMPANIA_CELULAR) {
        this.ID_COMPANIA_CELULAR = ID_COMPANIA_CELULAR;
    }

    public Double getMONTO_CREDITO() {
        return MONTO_CREDITO;
    }

    public void setMONTO_CREDITO(Double MONTO_CREDITO) {
        this.MONTO_CREDITO = MONTO_CREDITO;
    }

    public Conexion getCon() {
        return this.con;
    }

    public void setCon(Conexion con) {
        this.con = con;
    }

    public int getESTADO() {
        return ESTADO;
    }

    public void setESTADO(int ESTADO) {
        this.ESTADO = ESTADO;
    }
    
}
